home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Applications / DataScope 2.0.3 / DataScope2l / DSSource / fparse.l.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-04  |  10.1 KB  |  494 lines  |  [TEXT/MPS ]

  1. # include "stdio.h"
  2. # define replaceget(a)  fcompget(a)
  3. # define replaceput(a,b) fcompout(a)
  4. # define U(x) x
  5. # define NLSTATE yyprevious=YYNEWLINE
  6. # define BEGIN yybgin = yysvec + 1 +
  7. # define INITIAL 0
  8. # define YYLERR yysvec
  9. # define YYSTATE (yyestate-yysvec-1)
  10. # define YYOPTIM 1
  11. # define YYLMAX BUFSIZ
  12. # define output(c) replaceput(c,yyout)
  13. # define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):replaceget(yyin))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)
  14. # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;}
  15. # define yymore() (yymorfg=1)
  16. # define ECHO fprintf(yyout, "%s",yytext)
  17. # define REJECT { nstr = yyreject(); goto yyfussy;}
  18. int yyleng; extern char yytext[];
  19. int yymorfg;
  20. extern char *yysptr, yysbuf[];
  21. int yytchar;
  22. FILE *yyin = {stdin}, *yyout = {stdout};
  23. extern int yylineno;
  24. struct yysvf { 
  25.     struct yywork *yystoff;
  26.     struct yysvf *yyother;
  27.     int *yystops;};
  28. struct yysvf *yyestate;
  29. extern struct yysvf yysvec[], *yybgin;
  30. # define YYNEWLINE 10
  31. yylex(){
  32. int nstr; extern int yyprevious;
  33. while((nstr = yylook()) >= 0)
  34. yyfussy: switch(nstr){
  35. case 0:
  36. if(yywrap()) return(0); break;
  37. case 1:
  38.         { return(TSTAR); }
  39. break;
  40. case 2:
  41.         { return(TSLASH); }
  42. break;
  43. case 3:
  44.         { return(TPLUS); }
  45. break;
  46. case 4:
  47.         { return(TMINUS); }
  48. break;
  49. case 5:
  50.         { return(TLP); }
  51. break;
  52. case 6:
  53.         { return(TRP); }
  54. break;
  55. case 7:
  56.         { return(TEQUAL); }
  57. break;
  58. case 8:
  59.          { return(TCOMMA); }
  60. break;
  61. case 9:
  62. {
  63.             if (NULL == (yylval.lexv = NewPtr(strlen(yytext)+1)))
  64.                 return(-1);
  65.             strcpy(yylval.lexv,yytext);
  66.             return(TIDENT);
  67.             }
  68. break;
  69. case 10:
  70.     case 11:
  71. case 12:
  72. case 13:
  73.     {
  74.             sscanf(yytext,"%f",&yylval.lexc);
  75.             return(TFLOAT);
  76.             }
  77. break;
  78. case -1:
  79. break;
  80. default:
  81. fprintf(yyout,"bad switch yylook %d",nstr);
  82. } return(0); }
  83. /* end of yylex */
  84.  
  85. yywrap()
  86.     {
  87.     return(1);
  88.  
  89. }
  90. int yyvstop[] = {
  91. 0,
  92.  
  93. 5,
  94. 0,
  95.  
  96. 6,
  97. 0,
  98.  
  99. 1,
  100. 0,
  101.  
  102. 3,
  103. 0,
  104.  
  105. 8,
  106. 0,
  107.  
  108. 4,
  109. 0,
  110.  
  111. 2,
  112. 0,
  113.  
  114. 10,
  115. 0,
  116.  
  117. 7,
  118. 0,
  119.  
  120. 9,
  121. 0,
  122.  
  123. 12,
  124. 0,
  125.  
  126. 11,
  127. 0,
  128.  
  129. 11,
  130. 12,
  131. 0,
  132.  
  133. 13,
  134. 0,
  135.  
  136. 12,
  137. 0,
  138.  
  139. 11,
  140. 0,
  141.  
  142. 11,
  143. 12,
  144. 0,
  145. 0};
  146. # define YYTYPE char
  147. struct yywork { YYTYPE verify, advance; } yycrank[] = {
  148. 0,0,    0,0,    1,0,    1,0,    
  149. 1,0,    1,0,    1,0,    1,0,    
  150. 1,0,    1,0,    1,0,    1,0,    
  151. 1,0,    1,0,    1,0,    1,0,    
  152. 1,0,    1,0,    1,0,    1,0,    
  153. 1,0,    1,0,    1,0,    1,0,    
  154. 1,0,    1,0,    1,0,    1,0,    
  155. 1,0,    1,0,    1,0,    1,0,    
  156. 1,0,    1,0,    1,0,    1,0,    
  157. 1,0,    1,0,    1,0,    1,0,    
  158. 1,0,    1,3,    1,4,    1,5,    
  159. 1,6,    1,7,    1,8,    1,9,    
  160. 1,10,    1,11,    0,0,    0,0,    
  161. 0,0,    0,0,    0,0,    0,0,    
  162. 0,0,    0,0,    0,0,    1,0,    
  163. 1,0,    1,0,    1,12,    1,0,    
  164. 1,0,    1,0,    1,13,    0,0,    
  165. 0,0,    1,13,    0,0,    0,0,    
  166. 0,0,    0,0,    0,0,    0,0,    
  167. 0,0,    0,0,    0,0,    0,0,    
  168. 0,0,    0,0,    0,0,    0,0,    
  169. 0,0,    0,0,    0,0,    0,0,    
  170. 0,0,    0,0,    0,0,    0,0,    
  171. 1,0,    1,0,    1,0,    1,0,    
  172. 0,0,    1,0,    9,14,    9,14,    
  173. 9,14,    9,14,    9,14,    9,14,    
  174. 9,14,    9,14,    9,14,    9,14,    
  175. 16,20,    0,0,    16,20,    0,0,    
  176. 0,0,    16,21,    16,21,    16,21,    
  177. 16,21,    16,21,    16,21,    16,21,    
  178. 16,21,    16,21,    16,21,    0,0,    
  179. 1,0,    1,0,    1,0,    1,0,    
  180. 1,0,    2,0,    2,0,    2,0,    
  181. 2,0,    2,0,    2,0,    2,0,    
  182. 2,0,    2,0,    2,0,    2,0,    
  183. 2,0,    2,0,    2,0,    2,0,    
  184. 2,0,    2,0,    2,0,    2,0,    
  185. 2,0,    2,0,    2,0,    2,0,    
  186. 2,0,    2,0,    2,0,    2,0,    
  187. 2,0,    2,0,    2,0,    2,0,    
  188. 2,0,    2,0,    2,0,    2,0,    
  189. 2,0,    2,0,    2,0,    2,0,    
  190. 2,3,    2,4,    2,5,    0,0,    
  191. 2,7,    2,8,    2,9,    2,10,    
  192. 14,17,    14,17,    18,24,    18,24,    
  193. 0,0,    0,0,    0,0,    0,0,    
  194. 0,0,    0,0,    2,0,    2,0,    
  195. 2,0,    2,12,    2,0,    2,0,    
  196. 2,0,    11,15,    0,0,    11,11,    
  197. 11,11,    11,11,    11,11,    11,11,    
  198. 11,11,    11,11,    11,11,    11,11,    
  199. 11,11,    0,0,    0,0,    0,0,    
  200. 14,17,    14,17,    18,24,    18,24,    
  201. 0,0,    0,0,    0,0,    11,16,    
  202. 11,16,    0,0,    0,0,    2,0,    
  203. 2,0,    2,0,    2,0,    17,22,    
  204. 2,0,    17,22,    0,0,    0,0,    
  205. 17,23,    17,23,    17,23,    17,23,    
  206. 17,23,    17,23,    17,23,    17,23,    
  207. 17,23,    17,23,    0,0,    0,0,    
  208. 0,0,    0,0,    0,0,    0,0,    
  209. 0,0,    0,0,    0,0,    11,16,    
  210. 11,16,    0,0,    0,0,    2,0,    
  211. 2,0,    2,0,    2,0,    2,0,    
  212. 13,13,    13,13,    13,13,    13,13,    
  213. 13,13,    13,13,    13,13,    13,13,    
  214. 13,13,    13,13,    0,0,    0,0,    
  215. 0,0,    0,0,    0,0,    0,0,    
  216. 0,0,    13,13,    13,13,    13,13,    
  217. 13,13,    13,13,    13,13,    13,13,    
  218. 13,13,    13,13,    13,13,    13,13,    
  219. 13,13,    13,13,    13,13,    13,13,    
  220. 13,13,    13,13,    13,13,    13,13,    
  221. 13,13,    13,13,    13,13,    13,13,    
  222. 13,13,    13,13,    13,13,    0,0,    
  223. 0,0,    0,0,    0,0,    13,13,    
  224. 0,0,    13,13,    13,13,    13,13,    
  225. 13,13,    13,13,    13,13,    13,13,    
  226. 13,13,    13,13,    13,13,    13,13,    
  227. 13,13,    13,13,    13,13,    13,13,    
  228. 13,13,    13,13,    13,13,    13,13,    
  229. 13,13,    13,13,    13,13,    13,13,    
  230. 13,13,    13,13,    13,13,    15,18,    
  231. 15,18,    15,18,    15,18,    15,18,    
  232. 15,18,    15,18,    15,18,    15,18,    
  233. 15,18,    0,0,    0,0,    0,0,    
  234. 0,0,    0,0,    0,0,    0,0,    
  235. 19,25,    0,0,    19,25,    15,19,    
  236. 15,19,    19,26,    19,26,    19,26,    
  237. 19,26,    19,26,    19,26,    19,26,    
  238. 19,26,    19,26,    19,26,    20,21,    
  239. 20,21,    20,21,    20,21,    20,21,    
  240. 20,21,    20,21,    20,21,    20,21,    
  241. 20,21,    22,23,    22,23,    22,23,    
  242. 22,23,    22,23,    22,23,    22,23,    
  243. 22,23,    22,23,    22,23,    15,19,    
  244. 15,19,    24,27,    0,0,    24,27,    
  245. 0,0,    0,0,    24,28,    24,28,    
  246. 24,28,    24,28,    24,28,    24,28,    
  247. 24,28,    24,28,    24,28,    24,28,    
  248. 25,26,    25,26,    25,26,    25,26,    
  249. 25,26,    25,26,    25,26,    25,26,    
  250. 25,26,    25,26,    27,28,    27,28,    
  251. 27,28,    27,28,    27,28,    27,28,    
  252. 27,28,    27,28,    27,28,    27,28,    
  253. 0,0};
  254. struct yysvf yysvec[] = {
  255. 0,    0,    0,
  256. yycrank+-1,    0,        0,    
  257. yycrank+-128,    yysvec+1,    0,    
  258. yycrank+0,    0,        yyvstop+1,
  259. yycrank+0,    0,        yyvstop+3,
  260. yycrank+0,    0,        yyvstop+5,
  261. yycrank+0,    0,        yyvstop+7,
  262. yycrank+0,    0,        yyvstop+9,
  263. yycrank+0,    0,        yyvstop+11,
  264. yycrank+50,    0,        0,    
  265. yycrank+0,    0,        yyvstop+13,
  266. yycrank+147,    0,        yyvstop+15,
  267. yycrank+0,    0,        yyvstop+17,
  268. yycrank+208,    0,        yyvstop+19,
  269. yycrank+108,    yysvec+9,    yyvstop+21,
  270. yycrank+283,    0,        yyvstop+23,
  271. yycrank+65,    0,        0,    
  272. yycrank+180,    0,        0,    
  273. yycrank+110,    yysvec+15,    yyvstop+25,
  274. yycrank+305,    0,        0,    
  275. yycrank+315,    0,        0,    
  276. yycrank+0,    yysvec+20,    yyvstop+28,
  277. yycrank+325,    0,        0,    
  278. yycrank+0,    yysvec+22,    yyvstop+30,
  279. yycrank+342,    0,        0,    
  280. yycrank+352,    0,        0,    
  281. yycrank+0,    yysvec+25,    yyvstop+32,
  282. yycrank+362,    0,        0,    
  283. yycrank+0,    yysvec+27,    yyvstop+34,
  284. 0,    0,    0};
  285. struct yywork *yytop = yycrank+419;
  286. struct yysvf *yybgin = yysvec+1;
  287. char yymatch[] = {
  288. 00  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  289. 01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  290. 01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  291. 01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  292. 01  ,01  ,01  ,01  ,01  ,01  ,01  ,01  ,
  293. 01  ,01  ,01  ,'+' ,01  ,'+' ,01  ,01  ,
  294. '0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,
  295. '0' ,'0' ,01  ,01  ,01  ,01  ,01  ,01  ,
  296. 01  ,'A' ,'A' ,'A' ,'D' ,'D' ,'A' ,'A' ,
  297. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  298. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  299. 'A' ,'A' ,'A' ,01  ,01  ,01  ,01  ,'A' ,
  300. 01  ,'A' ,'A' ,'A' ,'D' ,'D' ,'A' ,'A' ,
  301. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  302. 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,
  303. 'A' ,'A' ,'A' ,01  ,01  ,01  ,01  ,01  ,
  304. 0};
  305. char yyextra[] = {
  306. 0,0,0,0,0,0,0,0,
  307. 0,0,0,0,0,0,0,0,
  308. 0};
  309. #ifndef lint
  310. static    char ncform_sccsid[] = "@(#)ncform 1.1 86/07/08 SMI"; /* from S5R2 1.2 */
  311. #endif
  312.  
  313. int yylineno =1;
  314. # define YYU(x) x
  315. # define NLSTATE yyprevious=YYNEWLINE
  316. char yytext[YYLMAX];
  317. struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp;
  318. char yysbuf[YYLMAX];
  319. char *yysptr = yysbuf;
  320. int *yyfnd;
  321. extern struct yysvf *yyestate;
  322. int yyprevious = YYNEWLINE;
  323. yylook(){
  324.     register struct yysvf *yystate, **lsp;
  325.     register struct yywork *yyt;
  326.     struct yysvf *yyz;
  327.     int yych, yyfirst;
  328.     struct yywork *yyr;
  329. # ifdef LEXDEBUG
  330.     int debug;
  331. # endif
  332.     char *yylastch;
  333.     /* start off machines */
  334. # ifdef LEXDEBUG
  335.     debug = 0;
  336. # endif
  337.     yyfirst=1;
  338.     if (!yymorfg)
  339.         yylastch = yytext;
  340.     else {
  341.         yymorfg=0;
  342.         yylastch = yytext+yyleng;
  343.         }
  344.     for(;;){
  345.         lsp = yylstate;
  346.         yyestate = yystate = yybgin;
  347.         if (yyprevious==YYNEWLINE) yystate++;
  348.         for (;;){
  349. # ifdef LEXDEBUG
  350.             if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1);
  351. # endif
  352.             yyt = yystate->yystoff;
  353.             if(yyt == yycrank && !yyfirst){  /* may not be any transitions */
  354.                 yyz = yystate->yyother;
  355.                 if(yyz == 0)break;
  356.                 if(yyz->yystoff == yycrank)break;
  357.                 }
  358.             *yylastch++ = yych = input();
  359.             yyfirst=0;
  360.         tryagain:
  361. # ifdef LEXDEBUG
  362.             if(debug){
  363.                 fprintf(yyout,"char ");
  364.                 allprint(yych);
  365.                 putchar('\n');
  366.                 }
  367. # endif
  368.             yyr = yyt;
  369.             if ( (int)yyt > (int)yycrank){
  370.                 yyt = yyr + yych;
  371.                 if (yyt <= yytop && yyt->verify+yysvec == yystate){
  372.                     if(yyt->advance+yysvec == YYLERR)    /* error transitions */
  373.                         {unput(*--yylastch);break;}
  374.                     *lsp++ = yystate = yyt->advance+yysvec;
  375.                     goto contin;
  376.                     }
  377.                 }
  378. # ifdef YYOPTIM
  379.             else if((int)yyt < (int)yycrank) {        /* r < yycrank */
  380.                 yyt = yyr = yycrank+(yycrank-yyt);
  381. # ifdef LEXDEBUG
  382.                 if(debug)fprintf(yyout,"compressed state\n");
  383. # endif
  384.                 yyt = yyt + yych;
  385.                 if(yyt <= yytop && yyt->verify+yysvec == yystate){
  386.                     if(yyt->advance+yysvec == YYLERR)    /* error transitions */
  387.                         {unput(*--yylastch);break;}
  388.                     *lsp++ = yystate = yyt->advance+yysvec;
  389.                     goto contin;
  390.                     }
  391.                 yyt = yyr + YYU(yymatch[yych]);
  392. # ifdef LEXDEBUG
  393.                 if(debug){
  394.                     fprintf(yyout,"try fall back character ");
  395.                     allprint(YYU(yymatch[yych]));
  396.                     putchar('\n');
  397.                     }
  398. # endif
  399.                 if(yyt <= yytop && yyt->verify+yysvec == yystate){
  400.                     if(yyt->advance+yysvec == YYLERR)    /* error transition */
  401.                         {unput(*--yylastch);break;}
  402.                     *lsp++ = yystate = yyt->advance+yysvec;
  403.                     goto contin;
  404.                     }
  405.                 }
  406.             if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){
  407. # ifdef LEXDEBUG
  408.                 if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1);
  409. # endif
  410.                 goto tryagain;
  411.                 }
  412. # endif
  413.             else
  414.                 {unput(*--yylastch);break;}
  415.         contin:
  416. # ifdef LEXDEBUG
  417.             if(debug){
  418.                 fprintf(yyout,"state %d char ",yystate-yysvec-1);
  419.                 allprint(yych);
  420.                 putchar('\n');
  421.                 }
  422. # endif
  423.             ;
  424.             }
  425. # ifdef LEXDEBUG
  426.         if(debug){
  427.             fprintf(yyout,"stopped at %d with ",*(lsp-1)-yysvec-1);
  428.             allprint(yych);
  429.             putchar('\n');
  430.             }
  431. # endif
  432.         while (lsp-- > yylstate){
  433.             *yylastch-- = 0;
  434.             if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){
  435.                 yyolsp = lsp;
  436.                 if(yyextra[*yyfnd]){        /* must backup */
  437.                     while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){
  438.                         lsp--;
  439.                         unput(*yylastch--);
  440.                         }
  441.                     }
  442.                 yyprevious = YYU(*yylastch);
  443.                 yylsp = lsp;
  444.                 yyleng = yylastch-yytext+1;
  445.                 yytext[yyleng] = 0;
  446. # ifdef LEXDEBUG
  447.                 if(debug){
  448.                     fprintf(yyout,"\nmatch ");
  449.                     sprint(yytext);
  450.                     fprintf(yyout," action %d\n",*yyfnd);
  451.                     }
  452. # endif
  453.                 return(*yyfnd++);
  454.                 }
  455.             unput(*yylastch);
  456.             }
  457.         if (yytext[0] == 0  /* && feof(yyin) */)
  458.             {
  459.             yysptr=yysbuf;
  460.             return(0);
  461.             }
  462.         yyprevious = yytext[0] = input();
  463.         if (yyprevious>0)
  464.             output(yyprevious);
  465.         yylastch=yytext;
  466. # ifdef LEXDEBUG
  467.         if(debug)putchar('\n');
  468. # endif
  469.         }
  470.     }
  471. yyback(p, m)
  472.     int *p;
  473. {
  474. if (p==0) return(0);
  475. while (*p)
  476.     {
  477.     if (*p++ == m)
  478.         return(1);
  479.     }
  480. return(0);
  481. }
  482.     /* the following are only used in the lex library */
  483. yyinput(){
  484.     return(input());
  485.     }
  486. yyoutput(c)
  487.   int c; {
  488.     output(c);
  489.     }
  490. yyunput(c)
  491.    int c; {
  492.     unput(c);
  493.     }
  494.